use std::io; //Shtuchki ot Ivashki (c), v0.0.4, 2023.
use ferris_says::say; 
use reqwest::blocking::get;
use std::collections::HashSet;
use scraper::{Selector, Html};


fn main() {
    println!("Помощь с морфемным разбором! Нажмите ctrl + c чтобы выйти,  введите '//' для сжатой справки. И да, лучше используйте '//' в полноэкранном режиме.");


    loop{
        println!("Bведите слово: ");
        let mut ur = String::from("https://udarenieru.ru/index.php?word=on&morph_word=");
        let mut inp_s = String::new();
        io::stdin().read_line(&mut inp_s).unwrap(); 
        inp_s = inp_s.trim_end().to_owned();
        if inp_s == "//" {
            let stdout = io::stdout();
            let message = String::from("Небольшая справка:\n1) Если программa вылетает, значит либо она не находит слово в словарях, либо вы допустили ошибку. \n2) Если вам вместе и падежом попалась приписка (одуш.), то не обращайте на неё внимание. \n3) Не вводите инфинитивы!!! Для них программа не сможет предоставить разбор. \n4) Это программа-эксперимент! Не стоит использовать её результаты. \n5) Телеграм разработчика(для вопросов и предложений): @iVanSFrolov");
            let width = message.chars().count();

            let mut writer = io::BufWriter::new(stdout.lock());
            say(&message, width, &mut writer).unwrap();
            continue;
        }

        ur += &inp_s;

        let mut info = String::new();
        let mut ans = HashSet::new();
        println!("Отправляю запрос...");
        let response = get(ur).expect("Не удалось получить ответ");
        println!("Получил ответ...\n");
        let body = response.text().expect("Не удалось получить тело ответа");

        let document = Html::parse_document(&body);
        let selector =  Selector::parse("tr").expect("ничего не найдено");
        for element in document.select(&selector) { 
                info = element.text().collect::<String>();
                info.trim();
                if !info.starts_with("Разбор") && !info.starts_with("Морфемно-орфографический"){
                    ans.insert(info.clone());
                }
        }
        if info == ""{
            println!("Ошибка! Невозможно предоставить разбор.");
            continue;
        }
        else{
            for e in ans{
                println!("{e}");
            }
            println!("");
        }
    }
}

